001-let 和 const

1. let

if else while for{
let girl = "小红";
}
console.log(girl);
console.log(song)
let song = "恋爱达人"; //不允许在变量声明之前使用变量,var可以
**{**
let school = "尚硅谷";
fuction fn(){
	console.log(school);//可以正常调用
}
fn();
}
关于变量提升的易错点

let items = document.getElementsByClassName("item");
//遍历并绑定事件
for(let i=0;i<items.length;i++){   
	items[i].onclick = function(){
	//修改背景色,方法一
	this.style.background = "pink";
	//方法二
	items[i].style.background = "pink"; 
}
}

如果for循环中的let改成var,则方法二不可用,因为var会变量提升到全局,每次items[i]都是访问的items[items.length],而let不会变量提升,所以只会在当前循环的作用域中起作用,items[i]访问时,自己所在的作用域(点击事件的回调函数中,也就是离他最近的{})没有定义i,则向上级作用域调用,也就是for循环,可以调用成功。也就是for循环每一遍都会创建一个i,i值也不同。

2. const